package 简单.哈希表;

/**
 * 给你一个整数数组 hours，表示以 小时 为单位的时间，返回一个整数，表示满足
 * i < j 且 hours[i] + hours[j] 构成 整天 的下标对 i, j 的数目。
 * 整天 定义为时间持续时间是 24 小时的 整数倍 。
 * 例如，1 天是 24 小时，2 天是 48 小时，3 天是 72 小时，以此类推。
 *
 * @ https://leetcode.cn/problems/count-pairs-that-form-a-complete-day-i/description/?envType=daily-question&envId=2024-10-22
 * @date 2024/10/22
 */
public class 构成整天的下标对数目I_3184 {

    public static void main(String[] args) {

    }

    /**
     * 预处理+等差数列求和+双指针
     */
    public int countCompleteDayPairs(int[] hours) {
        int[] cnt = new int[24];
        for (int hour : hours) {
            cnt[hour % 24]++;
        }
        // n*a1+n(n-1)d/2
        int ans = 0;

        ans += (cnt[0] - 1) * 1 + (cnt[0] - 1) * (cnt[0] - 1 - 1) * 1 / 2;
        ans += (cnt[12] - 1) * 1 + (cnt[12] - 1) * (cnt[12] - 1 - 1) * 1 / 2;

        int left = 1, right = 23;
        while (left < right) {
            ans += cnt[left] * cnt[right];
            left++;
            right--;
        }
        return ans;
    }

}
